#include <stdio.h>

int main(int argc, char const *argv[])
{
  /*******整数*******/
    int a = 567 ;
    printf("a=%d\n",a);
    printf("a=%8d\n",a);    // 实际输出 < m   指定输出宽度8个位置，不够左补空格，左补5个空格
    printf("a=%2d\n",a);    // 实际输出 > m   指定输出宽度2个位置，超出设定的位置，按照实际输出

  /*******实数*******/
    float b = 123.456 ;
    printf("b=%.0f\n",b);     // 对实数，指定小数点后位数，保留0位（四舍五入）
    printf("b=%.1f\n",b);     // 对实数，指定小数点后位数，保留1位（四舍五入）
    printf("b=%.2f\n",b);     // 对实数，指定小数点后位数，保留2位（四舍五入）
    printf("b=%8.2f\n",b);    // 对实数，指定小数点后位数，保留2位（四舍五入）,输出宽度8 ，小数点保留2位，不够左补2空格（小数点占一位）

  /*******字符串*******/
    printf("str=%s\n","goodbye");        //字符串输出 
    printf("str=%0.5s\n","goodbye");     // 对字符串，指定实际输出位数，可以输出的字符数5个
    printf("str=%10.5s\n","goodbye");    // 输出宽度10个位置，实际输出5个字符，不够左补5个空格

  /*******对齐（printf 默认右对齐）*******/
    printf("a=%-8d",a);                  // 左对齐，实际输出 < m  指定输出宽度8个位置，不够补空格，右补5个空格
    printf("*\n");
    printf("str=%-10.5s","goodbye");    // 左对齐，输出宽度10个位置，实际输出5个字符，不够右边补5个空格
    printf("*\n");
    printf("b=%-8.2f",b);              // 对实数，指定小数点后位数，保留2位（四舍五入）,输出宽度8 ，小数点保留2位，不够右补2空格（小数点占一位）
    printf("*\n");

  /******* + 指定在有符号的数的正数前面显示正号（+）*******/
    printf("a=%+d\n",a);
    printf("a=%+2d\n",a);      // 实际输出 > m   指定输出宽度2个位置，超出设定的位置，按照实际输出
    int c = -567 ;
    printf("c=%+8d\n",c);      // 实际输出 < m   指定输出宽度8个位置，不够左补空格，左补4个空格( “+” 占一位)
    printf("b=%+8.2f\n",b);    // 对实数，指定小数点后位数，保留2位（四舍五入）,输出宽度8 ，小数点保留2位，不够右补1空格（小数点占一位）

  /******* 0 不使用空格填充， 使用0填充
       补 0 的时候，都是左边补 0 ，右边补 0 ，逻辑错误
                   字符串补 0 ，没有意义*******/
    printf("a=%08d\n",a);       // 实际输出 > m   指定输出宽度8个位置，不够左面补5个0 
    printf("b=%08.2f\n",b);    // 对实数，指定小数点后位数，保留2位（四舍五入）,输出宽度8 ，小数点保留2位，不够左边补2个0

  /******* 0 不使用空格填充， 使用0填充*******/
    a = 571 ;
    printf("a=%#o\n",a);        //八进制显示前缀 0
    printf("a=%#x\n",a);        //十六进制显示前缀 0x
    printf("a=%#X\n",a);        //十六进制前缀显示 0X

  /******* l 在d,o,x,u前，指定输出精度为long型
           l 在e,f,g前，指定输出精度为double型*******/
    long long d = 123 ;
    double e = 123.123 ;
    printf("d=%ld\n",d);        //八进制显示前缀 0
    printf("e=%lf\n",e);        //十六进制显示前缀 0x

    return 0;
}
